﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Coolite.Ext.Web;
using ENT.GP.Core.Proyecto;
using System.Configuration;
using ENT.GP.Core;
using ENT.GP.Core.Core;
using ENT.GP.Core.Lookup;
using ENT.GP.Core.Proyecto.MarcoLegal;
using entgp.Code;

public partial class Proyectos_Legal_wucLegal : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            sEstado.DataSource = EstadoLookup.GetNameValueList();
            sEstado.DataBind();
            sTipoAdendum.DataSource = TipoAdendumLookup.GetNameValueList();
            sTipoAdendum.DataBind();

        }
    }
    private bool validarCamposTab3()
    {
        if (txtNumeroConvenio.Text != "Conv-" && dfFechaFirmaConvenio.Value.ToString() != "01/01/0001 0:00:00")
        {
            return true;
        }
        return false;
    }
    
    public void Show(int Id)
    {
        try
        {
            
            this.hidIdProyecto.SetValue(Id);
            Proyecto objProyecto = Proyecto.GetProyecto(Id);

            txtNombreProyecto.SetValue(objProyecto.Nombre);
            txaDescripcion.SetValue(objProyecto.DescripcionAdicional);
            txtNumeroConvenio.Text = objProyecto.NumeroConvenio;
            txaDescripcionLegal.Text = objProyecto.DescripcionLegal;
            dfFechaFirmaConvenio.SelectedDate = objProyecto.FechaFirmaConvenio;
            hidA.Text = objProyecto.FechaFirmaConvenio.Year.ToString();
            hidM.Text = objProyecto.FechaFirmaConvenio.Month.ToString();
            hidD.Text = objProyecto.FechaFirmaConvenio.Day.ToString();
            
            sEstadoML.DataSource = objProyecto.EstadosMarcoLegal;
            sEstadoML.DataBind();
       
            StoreDocumentos.DataSource = objProyecto.DocumentosConvenio;
            StoreDocumentos.DataBind();
            
            sAdendum.DataSource = objProyecto.Adendums;
            sAdendum.DataBind();
            winLegal.Show();
        }
        catch (Exception ex)
        {
            Ext.Msg.Show(new MessageBox.Config
            {
                Buttons = MessageBox.Button.OK,
                Icon = MessageBox.Icon.ERROR,
                Title = "Fallo",
                Message = "Ocurrio un error al guardar"
            });
            System.Text.Encoding encod = System.Text.Encoding.UTF8;
            System.IO.FileStream log = System.IO.File.Open(ConfigurationManager.AppSettings.Get("PathLog"), System.IO.FileMode.Append);
            log.Write(encod.GetBytes(ex.Message), 0, encod.GetByteCount(ex.Message));
            log.Close();
        }
    }
    protected void Command_Click(object sender, AjaxEventArgs e)
    {
        try
        {
            string ruta = string.Format("{0}{1}", UtilP.RUTA_ARCHIVOS, e.ExtraParams["Nombre"]);
            
            winVerArchivo.LoadContent(ruta);
            winVerArchivo.SetTitle(e.ExtraParams["Nombre"]);
            
            winVerArchivo.Show();
        }
        catch (Exception ex)
        {
            Util.RegistarLog(ex.ToString());
        }
        
    }
    /// <summary>
    /// Permite subir un documento al convenio
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public void SubirArchivo_Click(object sender, AjaxEventArgs e)
    {
        string tpl = "Subido el archivo Correctamente: {0}<br/>Size: {1} bytes";
        string nombre="";
        try
        {
            
            nombre=fufArchivos.PostedFile.FileName;
            nombre = UtilP.FormarNombre(nombre);
            fufArchivos.PostedFile.SaveAs(MapPath(string.Format("~/{0}{1}", ConfigurationManager.AppSettings.Get("PathFiles"), nombre) ));
            fufArchivos.SetValue(nombre);
            
        }
        catch (Exception ex)
        {
            e.Success = false;
            Util.RegistarLog(ex.ToString());
        }

        if (this.fufArchivos.HasFile)
        {
            Ext.Msg.Show(new MessageBox.Config
            {
                Buttons = MessageBox.Button.OK,
                Icon = MessageBox.Icon.INFO,
                Title = "Éxito",
                Message = string.Format(tpl, this.fufArchivos.PostedFile.FileName, this.fufArchivos.PostedFile.ContentLength)
            });
            hiTipoDoc.SetValue(nombre.Substring(nombre.IndexOf(".")+1));
            hiTamano.SetValue(this.fufArchivos.PostedFile.ContentLength);
            hiRuta.SetValue(nombre);
            hiTipo.SetValue("Documento");
            e.Success = true;
        }
        else
        {
            e.Success = false;
            Ext.Msg.Show(new MessageBox.Config
            {
                Buttons = MessageBox.Button.OK,
                Icon = MessageBox.Icon.ERROR,
                Title = "Fallo",
                Message = "Archivo No subido!!!"
            });
        }
    }
    /// <summary>
    /// Permite subir un docuemntos de tipo adendum
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public void SubirArchivoAdendum_Click(object sender, AjaxEventArgs e)
    {
        string tpl = "Subido el archivo Correctamente: {0}<br/>Size: {1} bytes";
        string nombre = "";
        try
        {

            nombre = fufArchivosAdendum.PostedFile.FileName;
            nombre = UtilP.FormarNombre(nombre);
            fufArchivosAdendum.PostedFile.SaveAs(MapPath(string.Format("~/{0}{1}", ConfigurationManager.AppSettings.Get("PathFiles"), nombre)));
            fufArchivosAdendum.SetValue(nombre);

        }
        catch (Exception ex)
        {
            e.Success = false;
            Util.RegistarLog(ex.ToString());
        }

        if (this.fufArchivosAdendum.HasFile)
        {
            Ext.Msg.Show(new MessageBox.Config
            {
                Buttons = MessageBox.Button.OK,
                Icon = MessageBox.Icon.INFO,
                Title = "Éxito",
                Message = string.Format(tpl, this.fufArchivosAdendum.PostedFile.FileName, this.fufArchivosAdendum.PostedFile.ContentLength)
            });
            hiTipoDoc.SetValue(nombre.Substring(nombre.IndexOf(".") + 1));
            hiTamano.SetValue(this.fufArchivosAdendum.PostedFile.ContentLength);
            hiRuta.SetValue(nombre);
            hiTipo.SetValue("Documento de Adendum");
            e.Success = true;
        }
        else
        {
            e.Success = false;
            Ext.Msg.Show(new MessageBox.Config
            {
                Buttons = MessageBox.Button.OK,
                Icon = MessageBox.Icon.ERROR,
                Title = "Fallo",
                Message = "Archivo No subido!!!"
            });
        }
    }

     
    /**
     * Convierte el campo de fechas a un formato de fecha estandar
     */
    private String FormatearFechas(DateField fecha)
    {
        DateTime Date = Convert.ToDateTime(fecha.Value);
        string formato = "dd/MM/yyyy";
        return Date.ToString(formato);
    }
    protected void btnGuardar_Click(object sender, AjaxEventArgs e)
    {
        try
        {
            string jsonEstados = e.ExtraParams["Estados"];
            string jsonDocumentos = e.ExtraParams["Documentos"];
            string jsonAdendums = e.ExtraParams["Adendums"];
            int Id = Convert.ToInt32(hidIdProyecto.Text);
            Proyecto proyecto = Proyecto.GetProyecto(Id);
            proyecto.DescripcionLegal =txaDescripcionLegal.Text;
            proyecto.NumeroConvenio=txtNumeroConvenio.Text;
            proyecto.FechaFirmaConvenio = new DateTime(Convert.ToInt32(hidA.Text), Convert.ToInt32(hidM.Text), Convert.ToInt32(hidD.Text));
            //proyecto.FechaFirmaConvenio = dfFechaFirmaConvenio.SelectedDate; //; FormatearFechas(dfFechaFirmaConvenio);
            //Documentos del convenio
            StoreDataHandler sdhDocumentos = new StoreDataHandler(jsonDocumentos);
            ChangeRecords<Documento> crDocumentos = sdhDocumentos.ObjectData<Documento>();
            
            foreach (Documento documento in crDocumentos.Deleted)
            {
                int indice = proyecto.DocumentosConvenio.IndexOf(proyecto.DocumentosConvenio.FirstOrDefault(x => x.Id == documento.Id));
                proyecto.DocumentosConvenio.RemoveAt(indice);
            }            

            foreach (Documento documento in crDocumentos.Created)
            {
                proyecto.DocumentosConvenio.Add(documento);
            }

            //Estados del Marco Legal
            StoreDataHandler sdhEstadosMarcoLegal = new StoreDataHandler(jsonEstados);
            ChangeRecords<ProyectoEstadoMarcoLegal> crEstadosMarcoLegal = sdhEstadosMarcoLegal.ObjectData<ProyectoEstadoMarcoLegal>();
            
            foreach (ProyectoEstadoMarcoLegal estadoMarcoLegal in crEstadosMarcoLegal.Deleted)
            {
                int indice = proyecto.EstadosMarcoLegal.IndexOf(proyecto.EstadosMarcoLegal.FirstOrDefault(x => x.Id == estadoMarcoLegal.Id));
                proyecto.EstadosMarcoLegal.RemoveAt(indice);
            }
            
            foreach (ProyectoEstadoMarcoLegal estadoMarcoLegal in crEstadosMarcoLegal.Updated)
            {
                int indice = proyecto.EstadosMarcoLegal.IndexOf(proyecto.EstadosMarcoLegal.FirstOrDefault(x => x.Id == estadoMarcoLegal.Id));
                Csla.Data.DataMapper.Map(estadoMarcoLegal, proyecto.EstadosMarcoLegal[indice]);
            }

            foreach (ProyectoEstadoMarcoLegal estadoMarcoLegal in crEstadosMarcoLegal.Created)
            {
                proyecto.EstadosMarcoLegal.Add(estadoMarcoLegal);
            }



            //Adendum de la parte legal del proyecto
            StoreDataHandler sdhAdendums = new StoreDataHandler(jsonAdendums);
            ChangeRecords<ProyectoAdendum> crAdendums = sdhAdendums.ObjectData<ProyectoAdendum>();
            foreach (var adendum in crAdendums.Created)
            {
                proyecto.Adendums.Add(adendum);
            }

            foreach (var adendum in crAdendums.Updated)
            {
                int indice = proyecto.Adendums.IndexOf(proyecto.Adendums.FirstOrDefault(x => x.Id == adendum.Id));
                Csla.Data.DataMapper.Map(adendum, proyecto.Adendums[indice]);
            }

            foreach (var adendum in crAdendums.Deleted)
            {
                int indice = proyecto.Adendums.IndexOf(proyecto.Adendums.FirstOrDefault(x => x.Id == adendum.Id));
                proyecto.Adendums.RemoveAt(indice);
            }

            proyecto = proyecto.Save();
            Ext.Msg.Show(new MessageBox.Config
            {
                Buttons = MessageBox.Button.OK,
                Icon = MessageBox.Icon.INFO,
                Title = "Proyecto",
                Message = "Los datos se han guardado correctamente"
            });
            LimpiarFormulario();
        }
        catch (Exception ex)
        {
            Ext.Msg.Show(new MessageBox.Config
            {
                Buttons = MessageBox.Button.OK,
                Icon = MessageBox.Icon.ERROR,
                Title = "Fallo",
                Message = "Ocurrio un error al guardar"
            });
            Util.RegistarLog(ex.ToString());
        }
    }
    void LimpiarFormulario()
    {
        sEstadoML.RemoveAll();
        StoreDocumentos.RemoveAll();
        txtNumeroConvenio.Reset();
        dfFechaFirmaConvenio.Reset();
        fufArchivos.Reset();
        winLegal.Hide();
    }
}
